/*
 * Copyright 1999-2011 Alibaba Group.
 *  
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *  
 *      http://www.apache.org/licenses/LICENSE-2.0
 *  
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.alibaba.dubbo.demo.provider;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.alibaba.dubbo.common.resolver.annotation.ListResolver;
import com.alibaba.dubbo.common.resolver.annotation.MapResolver;
import com.alibaba.dubbo.demo.DemoService;
import com.alibaba.dubbo.demo.Person;
import com.alibaba.dubbo.rpc.RpcContext;

public class DemoServiceImpl implements DemoService {

    public String sayHello(String name) {
    	RpcContext context = RpcContext.getContext();
    	
    	String current = new SimpleDateFormat("HH:mm:ss").format(new Date());
        System.out.println("[" + current + "] Hello " + name + ", request from consumer: " + context.getRemoteAddress() + ", cookie:" + context.getRequestHeaders().getHeader("cookie"));
        context.getResponseHeaders().setHeader("abc", current);
        
        return "Hello " + name + ", response from provider: " + context.getLocalAddress();
        
    }
 
	@Override
	public Person testObject(Person person) {
		System.out.println("testObject:" + person.toString());
		//if(person == null) return "<empty>";
		//return person.getName() + ":" + person.getAge();
		
		return person;
	}
    
	@Override
	public List<Person> testArray(List<Person> persons) {
		System.out.println("testList:" + (persons == null?"null":persons.size()));
		//return "array";
		return persons;
	}
	
	@Override
	public Map<String, Person> testMap(Map<String, Person> persons) {
		System.out.println("testMap:" + (persons == null?"null":persons.size()));
		//return "map";
		for(int i = 0;i<500;i++){
			Person p = new Person();
			p.setAge(i);
			p.setName(String.valueOf(i));
			persons.put(p.getName(), p);
		}
		return persons;
	}
	
	@Override
	public
	String testException() throws Exception{
		throw new IOException("aaaa");
	}
}